﻿#pragma once
#include "Map.h"
#include "Leader.h"
#include "Npc.h"
#include "Antagonist.h"
#include "Fight.h"
#include "Store.h"
#include "Task.h"
#include "Pool.h"
#include "Fish.h"
#include <fstream>

using namespace std;

class System
{
private:
	Pool pool;
	Fight game_fight;
	Map game_map;
	Weapon game_weapon[9] = {
		//      name     id  value   introduce   攻击力
		Weapon("普通木棍",1, 100, "没啥好介绍滴(づ●─●)づ<()>", 100),
		Weapon("普通铁棍",2, 100, "没啥好介绍滴(づ●─●)づ<()>", 100),
		Weapon("普通钢棍",3, 100, "没啥好介绍滴(づ●─●)づ<()>", 100),
		Weapon("name004",4, 100, "没啥好介绍滴(づ●─●)づ<()>", 100),
		Weapon("name005",5, 100, "没啥好介绍滴(づ●─●)づ<()>", 100),
		Weapon("name006",6, 100, "没啥好介绍滴(づ●─●)づ<()>", 100),
		Weapon("name007",7, 100, "没啥好介绍滴(づ●─●)づ<()>", 100),
		Weapon("name008",8, 100, "没啥好介绍滴(づ●─●)づ<()>", 100),
		Weapon()
	};
	Armor game_armor[9] = {
		//      name     id  value   introduce  护甲 闪避
		Armor("普通护甲",1, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, 10),
		Armor("精良护甲",2, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, 10),
		Armor("优秀护甲",3, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, 10),
		Armor("无敌护甲",4, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, 10),
		Armor("name005",5, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, 10),
		Armor("name006",6, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, 10),
		Armor("name007",7, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, 10),
		Armor("name008",8, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, 10),
		Armor("name009",9, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, 10)
	};
	Consume_items game_consume_items[9] = {
		//             name  id  value   introduce      效果  消耗品的类型
		Consume_items("面包",1, 100, "711居然还有吃的欸", 100, "HP"),
		Consume_items("屌丝饮料",2, 100, "不是3元喝不起，4元更有性价比", 100, "MP"),
		Consume_items("浓缩树脂",5, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, "strength"),
		Consume_items("树脂",6, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, "agilty"),
		Consume_items("肾上激素",7, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, "intelligence"),
		Consume_items("绷带",7, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, "HP"),
		Consume_items("能量饮料",7, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, "intelligence"),
		Consume_items("止痛药",7, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, "intelligence"),
		Consume_items("急救包",7, 100, "没啥好介绍滴(づ●─●)づ<()>", 100, "intelligence")
	};
	Quest_Items game_quest_items[6] = {
		//          name     id  value   introduce  效果  消耗品的类型
		Quest_Items(),
		Quest_Items("来自猪山滴狗头",1, 100, "没啥好介绍滴(づ●─●)づ<()>"),
		Quest_Items("开罐器",2, 100, "没啥好介绍滴(づ●─●)づ<()>"),
		Quest_Items("文件",3, 100, "没啥好介绍滴(づ●─●)づ<()>"),
		Quest_Items("海洋生物样本",4, 100, "没啥好介绍滴(づ●─●)づ<()>"),
		Quest_Items("防辐射服",4, 100, "没啥好介绍滴(づ●─●)づ<()>")
		//Quest_Items("name005",5, 100, "没啥好介绍滴(づ●─●)づ<()>"),
		//Quest_Items("name006",6, 100, "没啥好介绍滴(づ●─●)づ<()>"),
		//Quest_Items("name007",7, 100, "没啥好介绍滴(づ●─●)づ<()>"),
		//Quest_Items("name008",8, 100, "没啥好介绍滴(づ●─●)づ<()>"),
		//Quest_Items("name009",9, 100, "没啥好介绍滴(づ●─●)づ<()>")
	};

	Store game_store = Store(game_weapon, game_armor, game_consume_items, 8, 9, 9);
	/*map"0宿舍", "1猪山", "2食堂", "3、711 ",
"4高裕路", "5信息楼", "6综合体", "7海边", "8学生活动中心（需要防辐射服）", */
/*npc
0  宿舍阿姨 -》 花钱回复体力
1  灵活的狗 -》 HP
2  食堂大叔 -》 给任务 奖励   钱
3  便利店店员 -》 给任务(去 6综合体 找图书管理员要  开罐器) 奖励 防辐射服
4 不良中年人 - > HP
5  巨型蝙蝠 -> MP
6  图书管理员 -> 1.（不给开罐器，让它去 5信息楼 找  文件）  奖励：开罐器
				 2.  去 海边 打 鱼人   奖励： 真相？？
7 古怪鱼人 - 》 海洋生物样本
8 变种怪物 -》 打完game over
*/
	string npc2_common_words[3] = {
		"食堂大叔：食堂不提供饭食，这在西海岸很正常。",
		"约翰：大叔，我看您情绪有些低落，有什么烦恼吗？",
		"食堂大叔：年轻人，你知道宿舍后面的那座猪山吗？我老是被那山里灵活的狗给缠上，真是头疼死了。你能不能帮我解决一下这个问题？",

	};
	string npc2_task_words[9] = {
		"约翰：当然可以，我愿意帮忙。",
		"((づ●─●)づ<()>)",
		"食堂大叔：太好了，如果你能帮我教训三只狗，我会给你一些报酬作为谢礼。",
		"约翰：不用客气，我会办到的。",
		"divide",
		"约翰：我已经帮您教训了那些山里灵活的狗。",
		"食堂大叔：太感谢了，这是我答应的报酬。",
		"  （约翰的校园卡充值了 1000美元）",
		"食堂大叔：对了，学校新开的711便利店里进了不少好货，你可以去看看。"
	};
	string npc0_common_words[2] = {
		"宿管阿姨：小伙子，要多注意安全啊。",
		"宿管阿姨：小伙子啊，你能帮个忙吗？最近食堂的那位大叔情绪不太好，你能去了解一下发生了什么吗？"
	};
	string npc0_task_words[4] = {

		"约翰：只要你玩原神，你就是我异父异母的亲兄弟。没问题，这件事包在我身上。",
		"宿管阿姨：西海岸校区虽然不大，但别忘了多参考地图，要注意方向哦。",
		"divide",
		"宿管阿姨：谢谢小约翰帮助了！"
	};
	string npc3_common_words[6] = {
	"便利店店员：困困困困死我了。",
	"约翰：嗨，你好！",
	"便利店店员：嘿，欢迎来到711！需要找些什么吗？",
	"约翰：我只是随便看看，听说这里进了不少好货。",
	"便利店店员：没错，最近我们确实有一些新货进来。对了，我有个小请求，不知道你能不能帮我一下。",
	"便利店店员：这样吧，我之前借给了图书管理员我的开罐头器，但他一直没还给我。你能帮我要回来吗？"

	};
	string npc3_task_words[7] = {
		"约翰：好的，我会去找图书管理员，帮你要回开罐头器的。他在哪里？",
		"便利店店员：他在教学综合体里。太感谢了！如果你能帮我要回来，我会非常感激的。",
		"divide",
		"约翰：我拿到了，这是你的开罐器。",
		"便利店店员：太感谢了！你真是一个大好人。这下我终于可以吃到罐头里的东西了。作为谢礼，这是给你的。",
		"（约翰获得了防辐射服）",
		"约翰：（这怎么看都是卖不出去的东西，不如给我充一点原石。）"
	};
	string npc6_common_words[2][7] = {
	{
	"图书管理员：唉，现在的人都不爱看纸质书了。\n 约翰：这也是没办法的事。",
	"约翰：请问你就是这里的图书管理员吗？",
	"（图书管理员合上正在看的书本，轻轻地叹了一口气）",
	"图书管理员：没错，正是在下。",
	"约翰：听说便利店店员的开罐器在你这里，我是来帮他要回来的。",
	"（图书管理员仔细打量了一下约翰）",
	"图书管理员：哦，是哪个开罐器。我忘记把开罐器放哪了，这里实在是太乱了。你能不能先帮我一个小忙？完成后我想我就能找到开罐器了。"
	},
	{
	"图书管理员：唉，现在的人都不爱看纸质书了。\n 约翰：这也是没办法的事。",
	"图书管理员：少年，我看你骨骼精奇，定是盖世之才。我最近在进行一项调查，它可能与这里的每个人都有关联。"

	}

	};
	int len[4] = { 7, 14, 2, 18 };
	string npc6_task_words[2][18] = {
	{"约翰：好吧，什么忙？",
	"图书管理员：你知道这里的西海岸特色巨大蝙蝠吗？",
	"约翰：我在来的路上见到好几只。",
	"图书管理员：它们不仅体型巨大，头脑也相当聪明，甚至具备读写能力。听说一些个体的智力能媲美刚毕业的高中生，真是让人惊叹。",
	"约翰：我不太明白你的意思。",
	"图书管理员：哈哈，抱歉，我说远了。实际上，我希望你能去对面的信息楼，帮我取一些文件。非常简单，你只需要解决掉几只和我差不多大小的蝙蝠就可以了。",
	"约翰：嗯，好的，我试着做做看。",
	"divide",
	"约翰：终于完成了，我找回了你需要的文件。",
	"图书管理员：太感谢你了，年轻人。来，坐下休息会，喝杯茶吧。",
	"约翰：（这哪里有坐的地方啊。）",
	"约翰：所以你能先把开罐器给我吗？",
	"图书管理员：当然，不好意思，差点忘了。",
	"（图书管理员将开罐器交给了你，但他似乎还有话想要和你说！）"},
	{
	"约翰：我愿意帮助你。",
	"图书管理员：你果然是盖世之才。",
	"图书管理员：我希望你能去海边采集一些海洋生物的样本，我想研究一下西海岸的海洋生态。",
	"约翰：好的，我会去收集样本的。",
	"divide",
	"约翰：这是你要的海洋生物样本。没有想到西海岸的鱼还会长脚。",
	"图书管理员：你要习惯这件事，在西海岸，发生什么都很正常。",
	"约翰：我明白了，我就先告辞了。",
	"图书管理员：等一下，请留步。",
	"（不知道过了多久）",
	"图书管理员：化验结果出来了，果然和我猜想的一样，西海岸的海洋生物身上有辐射残留。",
	"约翰：这到底是什么意思。",
	"图书管理员：你的表现令我印象深刻，年轻人。我相信你有巨大的潜力，正是我需要的合作伙伴。托了你的福，我们已经越来越接近西海岸的真相了。",
	"约翰：真相？",
	"图书管理员：没错，就是真相。美国海洋大学的西海岸校区里其实隐藏着一个惊天大秘密。我有理由怀疑，西海岸校区曾经遭受过核打击。你从信息楼里带回来的文件里的信息所述并非虚无！",

	"图书管理员：我们正接近真相，美国海洋大学西海岸校区的秘密！现在，西海岸之谜的拼图只差最后一块，而这最后一块拼图就在曾被称为学生活动中心的地方。",
	"约翰：学生活动中心？那个地方不是禁区吗？",
	"图书管理员：如果你有防辐射服，进入就不会成为问题，711店员那儿可能有这东西，你可以去那里找找。"

	}
	};
	Npc game_npc[9] = {
		//   name     id   hp  mp  力 敏 智   正常谈话，		num  任务谈话       num(对话长度)
		/*0*/Npc("宿舍阿姨",1, 100,100, 10,10,10, npc0_common_words, 2, npc0_task_words, 4, "愿意将自己的床借给被赶出寝室的约翰使用，但是要收一笔小的费用。", 0 , 0),
		/*1*/Npc(),
		/*2*/Npc("食堂大叔",3, 100,100, 10,10,10,npc2_common_words, 3, npc2_task_words, 9, "由于经常被袭击，对学校附近灵活的狗泛滥感到苦恼不已。想要出钱找人帮他教训一下猪山里面的那群狗。", 300, 15),
		/*3*/Npc("便利店店员",4, 100,100, 10,10,10, npc3_common_words, 6, npc3_task_words, 7, "在人手不足的24小时便利店工作，顶着极度的疲劳安心做好自己的工作。想让你帮他在综合体里取一个东西，事成之后有重谢。", 350, 25),
		/*4*/Npc(),
		/*5*/Npc(),
		/*6*/Npc("图书管理员",4, 100,100, 10,10,10, npc6_common_words[0], 7, npc6_task_words[0],14, "躲在废弃的综合体中，沉迷于被人废弃的书籍。你要取的东西就在他的手里，但看起来不会轻易交给你。", 600, 60),
		/*7*/Npc(),
		/*8*/Npc()
	};
	Task game_task[9] = {
		Task("宿舍阿姨的委托"),
		Task(),
		Task("食堂大叔的委托：收拾猪山的三条狗"),
		Task("便利店店员的委托：从图书管理员要回开罐器"),
		Task(),
		Task(),
		Task("图书管理的委托：去信息楼找文件", "图书管理的委托：去海边收集海洋生物样本"),
		Task(),
		Task()
	};
	Antagonist enemy[9]
	{

		Antagonist(),//name      id   Hp  Mp   力   敏  智     对话																对话数量\掉落金币、经验    介绍				
		Antagonist("三只灵活的狗",2, 100, 100, 12, 12, 12, "(▼へ▼メ)干，又来个找茬的！(▼皿▼#)\n 约翰：呕吼！这斯还会说话。。", 1, 100,10, "是山里灵活的狗。有概率掉落回复体力的道具。出现位置：猪山"),
		Antagonist(),
		Antagonist(),
		Antagonist("不良中年人",2, 100, 100, 12, 12, 12, "(▼へ▼メ)干，又来个找茬的！(▼皿▼#)\n 约翰：呕吼！这斯还会说话。。", 1, 100,10,"老学长，曾经是不良少年，但因为留级次数过多而变成中年人。喜欢欺负新来的学弟。"),
		Antagonist("巨型蝙蝠",2, 100, 100, 12, 12, 12, "(▼へ▼メ)干，又来个找茬的！(▼皿▼#)\n 约翰：呕吼！这斯还会说话。。", 1, 100,10,"没有人知道为什么西海岸的蝙蝠能长这么大一只。在综合体中长期受到知识的熏陶，有些个体的智力水平甚至相当于刚毕业的高中生，是西海岸众人望尘莫及的存在。非常讨厌有人打扰它遨游在知识的海洋。"),
		Antagonist(),
		Antagonist("古怪鱼人",2, 100, 100, 12, 12, 12, "(▼へ▼メ)干，又来个找茬的！(▼皿▼#)\n 约翰：呕吼！这斯还会说话。。", 1, 100,10,"西海岸的鱼会长脚也很正常。"),
		Antagonist("变种怪物",2, 100, 100, 12, 12, 12, "(▼へ▼メ)干，又来个找茬的！(▼皿▼#)\n 约翰：呕吼！这斯还会说话。。", 1, 100,10,"美军的前秘密基地，那里曾进行过残酷的生化实验")
	};
	//Leader player("约翰", 1, 100, 100, 10, 10, 10);
					 //     name   id   hp    mp  力  敏  智
	Leader player = Leader("约翰", 111, 100, 100, 20, 10, 10);
	map<int, int> task_map;

public:

	void file_write();
	void file_read();

	void printCharacter_null();
	void printCharacter_arms();
	void printCharacter_armor();
	void printCharacter_arms_armor();
	System()
	{
		task_map[0] = 0;
		task_map[2] = 0;
		task_map[3] = 2;
		task_map[6] = 2;

		// 所需任务道具        // 奖励道具			
		game_npc[0].init_npc_goods_award(&game_quest_items[0], &game_weapon[8]); // NULL NULL
		game_npc[2].init_npc_goods_award(&game_quest_items[1], &game_weapon[8]); // 狗头 NULL(奖励是钱) 
		game_npc[3].init_npc_goods_award(&game_quest_items[2], &game_quest_items[5]); // 开罐器          防辐射服
		game_npc[6].init_npc_goods_award(&game_quest_items[3], &game_quest_items[2]); // 文件          开罐器
		//2. 海洋生物样本  真相+强力武器


		enemy[1].init_Antagonist_award(&game_quest_items[1]); // 狗-》 狗头
		enemy[4].init_Antagonist_award(&game_consume_items[5]); //  中年人 =》绷带
		enemy[5].init_Antagonist_award(&game_quest_items[3]);  //  蝙蝠 =》文件
		enemy[7].init_Antagonist_award(&game_quest_items[4]); // 鱼人 =》 海洋生物样本
		enemy[8].init_Antagonist_award(&game_weapon[8]); // 变种怪物 =》 无（game over）
	}

	void begin(Map& game_map);

};

